WebAssembly μ¬μ©μ μ§μ μΉμ μ λν ν¬κ΄μ μΈ κ°μ΄λλ‘, μ μΈκ³ κ°λ°μλ₯Ό μν λ©νλ°μ΄ν° μΆμΆ, νμ± κΈ°μ λ° μ€μ μ μ© μ¬λ‘μ μ€μ μ λ‘λλ€.
WebAssembly μ¬μ©μ μ§μ μΉμ νμ: λ©νλ°μ΄ν° μΆμΆ λ° μ²λ¦¬
WebAssembly (Wasm)λ μΉ λΈλΌμ°μ λΆν° μλ² μΈ‘ μ ν리μΌμ΄μ λ° μλ² λλ μμ€ν μ μ΄λ₯΄κΈ°κΉμ§ λ€μν νκ²½μμ μ€νλ μ μλ κ³ μ±λ₯ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν κ°λ ₯ν κΈ°μ λ‘ λΆμνμ΅λλ€. WebAssembly λͺ¨λμ μ€μν μΈ‘λ©΄μ μ¬μ©μ μ§μ μΉμ μ ν¬ν¨ν μ μλ κΈ°λ₯μ λλ€. μ΄λ¬ν μΉμ μ Wasm λ°μ΄λ리 λ΄μ μμμ λ°μ΄ν°λ₯Ό μ½μ νλ λ©μ»€λμ¦μ μ 곡νμ¬ λ©νλ°μ΄ν° μ μ₯, λλ²κΉ μ 보 λ° κΈ°ν λ€μν μ¬μ© μ¬λ‘μ λ§€μ° μ μ©ν©λλ€. μ΄ κΈ°μ¬λ WebAssembly μ¬μ©μ μ§μ μΉμ μ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡νλ©°, λ©νλ°μ΄ν° μΆμΆ, νμ± κΈ°μ λ° μ€μ μ μ©μ μ€μ μ λ‘λλ€.
WebAssembly ꡬ쑰 μ΄ν΄νκΈ°
μ¬μ©μ μ§μ μΉμ μ λ€μ΄κ°κΈ° μ μ WebAssembly λͺ¨λμ ꡬ쑰λ₯Ό κ°λ΅νκ² μ΄ν΄λ³΄κ² μ΅λλ€. Wasm λͺ¨λμ μΉμ IDλ‘ μλ³λλ μ¬λ¬ μΉμ μΌλ‘ ꡬμ±λ λ°μ΄λ리 νμμ λλ€. μ£Όμ μΉμ μ λ€μκ³Ό κ°μ΅λλ€:
- νμ μΉμ : ν¨μ μκ·Έλμ²λ₯Ό μ μν©λλ€.
- μν¬νΈ μΉμ : λͺ¨λλ‘ μν¬νΈλ μΈλΆ ν¨μ, λ©λͺ¨λ¦¬, ν μ΄λΈ λ° μ μ λ³μλ₯Ό μ μΈν©λλ€.
- ν¨μ μΉμ : λͺ¨λμ μ μλ ν¨μμ νμ μ μ μΈν©λλ€.
- ν μ΄λΈ μΉμ : ν¨μ μ°Έμ‘°μ λ°°μ΄μΈ ν μ΄λΈμ μ μν©λλ€.
- λ©λͺ¨λ¦¬ μΉμ : μ ν λ©λͺ¨λ¦¬ μμμ μ μν©λλ€.
- κΈλ‘λ² μΉμ : μ μ λ³μλ₯Ό μ μΈν©λλ€.
- μ΅μ€ν¬νΈ μΉμ : λͺ¨λμμ μ΅μ€ν¬νΈλ ν¨μ, λ©λͺ¨λ¦¬, ν μ΄λΈ λ° μ μ λ³μλ₯Ό μ μΈν©λλ€.
- μμ μΉμ : λͺ¨λ μΈμ€ν΄μ€ν μ μ€νλ ν¨μλ₯Ό μ§μ ν©λλ€.
- μλ¦¬λ¨ΌνΈ μΉμ : ν μ΄λΈ μμλ₯Ό μ΄κΈ°νν©λλ€.
- λ°μ΄ν° μΉμ : λ©λͺ¨λ¦¬ μμμ μ΄κΈ°νν©λλ€.
- μ½λ μΉμ : λͺ¨λμ μ μλ ν¨μμ λν λ°μ΄νΈμ½λλ₯Ό ν¬ν¨ν©λλ€.
- μ¬μ©μ μ§μ μΉμ : κ°λ°μκ° μμμ λ°μ΄ν°λ₯Ό μ½μ ν μ μλλ‘ ν©λλ€.
μ¬μ©μ μ§μ μΉμ μ ID(0)μ μ΄λ¦μΌλ‘ κ³ μ νκ² μλ³λ©λλ€. μ΄λ¬ν μ μ°μ±μ ν΅ν΄ κ°λ°μλ νΉμ μ¬μ© μ¬λ‘μ νμν λͺ¨λ μ’ λ₯μ λ°μ΄ν°λ₯Ό μ½μ ν μ μμΌλ―λ‘ WebAssembly λͺ¨λμ νμ₯νλ λ€μ©λ λκ΅¬κ° λ©λλ€.
WebAssembly μ¬μ©μ μ§μ μΉμ μ΄λ?
μ¬μ©μ μ§μ μΉμ μ κ°λ°μκ° μμμ λ°μ΄ν°λ₯Ό ν¬ν¨ν μ μλλ‘ νλ WebAssembly λͺ¨λμ νΉλ³ν μΉμ μ λλ€. μ΄λ€μ μΉμ ID 0μΌλ‘ μλ³λ©λλ€. κ° μ¬μ©μ μ§μ μΉμ μ μ΄λ¦(UTF-8 μΈμ½λ© λ¬Έμμ΄)κ³Ό μΉμ μ λ°μ΄ν° μμ²΄λ‘ κ΅¬μ±λ©λλ€. μ¬μ©μ μ§μ μΉμ λ΄ λ°μ΄ν°μ νμμ μ μ μΌλ‘ κ°λ°μμκ² λ¬λ € μμ΄ μλΉν μ μ°μ±μ μ 곡ν©λλ€. μ¬μ μ μλ ꡬ쑰μ μλ―Έλ₯Ό κ°μ§ νμ€ μΉμ κ³Ό λ¬λ¦¬, μ¬μ©μ μ§μ μΉμ μ WebAssembly λͺ¨λμ νμ₯νλ μμ νμ μ κ·Ό λ°©μμ μ 곡ν©λλ€. μ΄λ νΉν λ€μμ μ μ©ν©λλ€:
- λ©νλ°μ΄ν° μ μ₯: λͺ¨λμ μΆμ², λ²μ λλ λΌμ΄μ μ€ μΈλΆ μ 보μ κ°μ μ 보λ₯Ό ν¬ν¨ν©λλ€.
- λλ²κΉ μ 보: λλ²κΉ μ¬λ³Ό λλ μμ€ λ§΅ μ°Έμ‘°λ₯Ό ν¬ν¨ν©λλ€.
- νλ‘νμΌλ§ λ°μ΄ν°: μ±λ₯ λΆμμ μν λ§μ»€λ₯Ό μΆκ°ν©λλ€.
- μΈμ΄ νμ₯: μ¬μ©μ μ§μ μΈμ΄ κΈ°λ₯ λλ μ£Όμμ ꡬνν©λλ€.
- 보μ μ μ± : 보μ κ΄λ ¨ λ°μ΄ν°λ₯Ό ν¬ν¨ν©λλ€.
μ¬μ©μ μ§μ μΉμ μ ꡬ쑰
WebAssembly λͺ¨λμ μ¬μ©μ μ§μ μΉμ μ λ€μ κ΅¬μ± μμλ‘ κ΅¬μ±λ©λλ€:
- μΉμ ID: μ¬μ©μ μ§μ μΉμ μ κ²½μ° νμ 0μ λλ€.
- μΉμ ν¬κΈ°: μΉμ ID λ° ν¬κΈ° νλλ₯Ό μ μΈν μ 체 μ¬μ©μ μ§μ μΉμ μ ν¬κΈ°(λ°μ΄νΈ)μ λλ€.
- μ΄λ¦ κΈΈμ΄: LEB128 λΆνΈ μλ μ μλ‘ μΈμ½λ©λ μ¬μ©μ μ§μ μΉμ μ΄λ¦μ κΈΈμ΄(λ°μ΄νΈ)μ λλ€.
- μ΄λ¦: μ¬μ©μ μ§μ μΉμ μ μ΄λ¦μ λνλ΄λ UTF-8 μΈμ½λ© λ¬Έμμ΄μ λλ€.
- λ°μ΄ν°: μ¬μ©μ μ§μ μΉμ κ³Ό κ΄λ ¨λ μμμ λ°μ΄ν°μ λλ€. μ΄ λ°μ΄ν°μ νμκ³Ό μλ―Έλ μΉμ μ μ΄λ¦κ³Ό μ΄λ₯Ό ν΄μνλ μ ν리μΌμ΄μ μ μν΄ κ²°μ λ©λλ€.
λ€μμ ꡬ쑰λ₯Ό 보μ¬μ£Όλ κ°λ΅νλ λ€μ΄μ΄κ·Έλ¨μ λλ€:
[μΉμ ID (0)] [μΉμ ν¬κΈ°] [μ΄λ¦ κΈΈμ΄] [μ΄λ¦] [λ°μ΄ν°]
μ¬μ©μ μ§μ μΉμ νμ±: λ¨κ³λ³ κ°μ΄λ
μ¬μ©μ μ§μ μΉμ μ νμ±νλ κ²μ WebAssembly λͺ¨λ λ΄μ λ°μ΄λ리 λ°μ΄ν°λ₯Ό μ½κ³ ν΄μνλ κ²μ ν¬ν¨ν©λλ€. λ€μμ μμΈν λ¨κ³λ³ κ°μ΄λμ λλ€:
1. μΉμ ID μ½κΈ°
μΉμ μ 첫 λ²μ§Έ λ°μ΄νΈλ₯Ό μ½λ κ²μΌλ‘ μμν©λλ€. μΉμ IDκ° 0μ΄λ©΄ μ¬μ©μ μ§μ μΉμ μ λνλ λλ€.
const sectionId = wasmModule[offset];
if (sectionId === 0) {
// μ΄κ²μ μ¬μ©μ μ§μ μΉμ
μ
λλ€.
}
2. μΉμ ν¬κΈ° μ½κΈ°
λ€μμΌλ‘, μΉμ ID λ° ν¬κΈ° νλλ₯Ό μ μΈν μΉμ μ μ΄ λ°μ΄νΈ μλ₯Ό λνλ΄λ μΉμ ν¬κΈ°λ₯Ό μ½μ΅λλ€. μ΄κ²μ μΌλ°μ μΌλ‘ LEB128 λΆνΈ μλ μ μλ‘ μΈμ½λ©λ©λλ€.
const [sectionSize, bytesRead] = decodeLEB128Unsigned(wasmModule, offset + 1); offset += bytesRead + 1; // μΉμ IDμ ν¬κΈ°λ₯Ό μ§λ μ€νμ μ΄λ
3. μ΄λ¦ κΈΈμ΄ μ½κΈ°
μ¬μ©μ μ§μ μΉμ μ΄λ¦μ κΈΈμ΄λ₯Ό μ½μ΅λλ€. μ΄ λν LEB128 λΆνΈ μλ μ μλ‘ μΈμ½λ©λ©λλ€.
const [nameLength, bytesRead] = decodeLEB128Unsigned(wasmModule, offset); offset += bytesRead; // μ΄λ¦ κΈΈμ΄λ₯Ό μ§λ μ€νμ μ΄λ
4. μ΄λ¦ μ½κΈ°
μ΄μ λ¨κ³μμ μ»μ μ΄λ¦ κΈΈμ΄λ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ§μ μΉμ μ μ΄λ¦μ μ½μ΅λλ€. μ΄λ¦μ UTF-8 μΈμ½λ© λ¬Έμμ΄μ λλ€.
const name = new TextDecoder().decode(wasmModule.slice(offset, offset + nameLength)); offset += nameLength; // μ΄λ¦μ μ§λ μ€νμ μ΄λ
5. λ°μ΄ν° μ½κΈ°
λ§μ§λ§μΌλ‘, μ¬μ©μ μ§μ μΉμ λ΄μ λ°μ΄ν°λ₯Ό μ½μ΅λλ€. μ΄ λ°μ΄ν°μ νμμ μ¬μ©μ μ§μ μΉμ μ μ΄λ¦κ³Ό μ΄λ₯Ό ν΄μνλ μ ν리μΌμ΄μ μ λ°λΌ λ¬λΌμ§λλ€. λ°μ΄ν°λ νμ¬ μ€νμ μμ μμνμ¬ μΉμ μ λ¨μ λ°μ΄νΈ(μΉμ ν¬κΈ°μ μν΄ νμλ¨) λμ κ³μλ©λλ€.
const data = wasmModule.slice(offset, offset + (sectionSize - nameLength - bytesReadNameLength)); offset += (sectionSize - nameLength - bytesReadNameLength); // λ°μ΄ν°λ₯Ό μ§λ μ€νμ μ΄λ
μμ μ½λ μ€λν« (JavaScript)
λ€μμ WebAssembly λͺ¨λμμ μ¬μ©μ μ§μ μΉμ μ νμ±νλ λ°©λ²μ 보μ¬μ£Όλ κ°λ΅νλ JavaScript μ½λ μ€λν«μ λλ€:
function parseCustomSection(wasmModule, offset) {
const sectionId = wasmModule[offset];
if (sectionId !== 0) {
return null; // μ¬μ©μ μ§μ μΉμ
μ΄ μλλλ€.
}
let currentOffset = offset + 1;
const [sectionSize, bytesReadSize] = decodeLEB128Unsigned(wasmModule, currentOffset);
currentOffset += bytesReadSize;
const [nameLength, bytesReadNameLength] = decodeLEB128Unsigned(wasmModule, currentOffset);
currentOffset += bytesReadNameLength;
const name = new TextDecoder().decode(wasmModule.slice(currentOffset, currentOffset + nameLength));
currentOffset += nameLength;
const data = wasmModule.slice(currentOffset, offset + 1 + sectionSize);
return {
name: name,
data: data
};
}
function decodeLEB128Unsigned(wasmModule, offset) {
let result = 0;
let shift = 0;
let byte;
let bytesRead = 0;
do {
byte = wasmModule[offset + bytesRead];
result |= (byte & 0x7f) << shift;
shift += 7;
bytesRead++;
} while ((byte & 0x80) !== 0);
return [result, bytesRead];
}
μ€μ μ μ© λ° μ¬μ© μ¬λ‘
μ¬μ©μ μ§μ μΉμ μ μλ§μ μ€μ μ μ© μ¬λ‘λ₯Ό κ°μ§κ³ μμ΅λλ€. λͺ κ°μ§ μ£Όμ μ¬μ© μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
1. λ©νλ°μ΄ν° μ μ₯
μ¬μ©μ μ§μ μΉμ μ WebAssembly λͺ¨λμ λ²μ , μμ±μ, λΌμ΄μ μ€ λλ λΉλ μ 보μ κ°μ λ©νλ°μ΄ν°λ₯Ό μ μ₯νλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄λ λ ν° μμ€ν μμ λͺ¨λμ κ΄λ¦¬νκ³ μΆμ νλ λ° νΉν μ μ©ν μ μμ΅λλ€.
μμ:
μ¬μ©μ μ§μ μΉμ
μ΄λ¦: "module_metadata"
λ°μ΄ν° νμ: JSON
{
"version": "1.2.3",
"author": "Acme Corp",
"license": "MIT",
"build_date": "2024-01-01"
}
2. λλ²κΉ μ 보
μ¬μ©μ μ§μ μΉμ μ λλ²κΉ μ 보λ₯Ό ν¬ν¨νλ©΄ WebAssembly λͺ¨λμ λλ²κΉ νλ λ° ν° λμμ΄ λ μ μμ΅λλ€. μ¬κΈ°μλ μμ€ λ§΅ μ°Έμ‘°, μ¬λ³Ό μ΄λ¦ λλ κΈ°ν λλ²κΉ κ΄λ ¨ λ°μ΄ν°κ° ν¬ν¨λ μ μμ΅λλ€.
μμ:
μ¬μ©μ μ§μ μΉμ μ΄λ¦: "source_map" λ°μ΄ν° νμ: μμ€ λ§΅ νμΌ URL "https://example.com/module.wasm.map"
3. μΈμ΄ νμ₯ λ° μ£Όμ
μ¬μ©μ μ§μ μΉμ μ νμ€ WebAssembly μ¬μμ μΌλΆκ° μλ μΈμ΄ νμ₯ λλ μ£Όμμ ꡬννλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ°μλ νΉμ νλ«νΌ λλ μ¬μ© μ¬λ‘μ λ§κ² μ¬μ©μ μ§μ κΈ°λ₯μ μΆκ°νκ±°λ μ½λλ₯Ό μ΅μ νν μ μμ΅λλ€.
μμ:
μ¬μ©μ μ§μ μΉμ μ΄λ¦: "custom_optimization" λ°μ΄ν° νμ: μ΅μ ν ννΈλ₯Ό μ§μ νλ μ¬μ©μ μ§μ λ°μ΄λ리 νμ
4. 보μ μ μ±
μ¬μ©μ μ§μ μΉμ μ WebAssembly λͺ¨λ λ΄μ 보μ μ μ± λλ μ‘μΈμ€ μ μ΄ κ·μΉμ ν¬ν¨νλ λ° μ¬μ©λ μ μμ΅λλ€. μ΄λ λͺ¨λμ΄ μμ νκ³ μ μ΄λ νκ²½μμ μ€νλλλ‘ λ³΄μ₯νλ λ° λμμ΄ λ μ μμ΅λλ€.
μμ:
μ¬μ©μ μ§μ μΉμ
μ΄λ¦: "security_policy"
λ°μ΄ν° νμ: μ‘μΈμ€ μ μ΄ κ·μΉμ μ§μ νλ JSON
{
"allowed_domains": ["example.com", "acme.corp"],
"permissions": ["read_memory", "write_memory"]
}
5. νλ‘νμΌλ§ λ°μ΄ν°
μ¬μ©μ μ§μ μΉμ μ μ±λ₯ λΆμμ μν λ§μ»€λ₯Ό ν¬ν¨ν μ μμ΅λλ€. μ΄λ¬ν λ§μ»€λ WebAssembly λͺ¨λμ μ€νμ νλ‘νμΌλ§νκ³ μ±λ₯ λ³λͺ© νμμ μλ³νλ λ° μ¬μ©λ μ μμ΅λλ€.
μμ:
μ¬μ©μ μ§μ μΉμ μ΄λ¦: "profiling_markers" λ°μ΄ν° νμ: νμμ€ν¬ν λ° μ΄λ²€νΈ μλ³μλ₯Ό ν¬ν¨νλ λ°μ΄λ리 λ°μ΄ν°
κ³ κΈ κΈ°μ λ° κ³ λ € μ¬ν
1. LEB128 μΈμ½λ©
μ½λ μ€λν«μμ 보μ¬μ£Όλ―μ΄, μ¬μ©μ μ§μ μΉμ μ μΉμ ν¬κΈ° λ° μ΄λ¦ κΈΈμ΄μ κ°μ κ°λ³ κΈΈμ΄ μ μλ₯Ό λνλ΄κΈ° μν΄ μ’ μ’ LEB128(Little Endian Base 128) μΈμ½λ©μ μ¬μ©ν©λλ€. LEB128 μΈμ½λ©μ μ΄ν΄νλ κ²μ μ΄λ¬ν κ°μ μ¬λ°λ₯΄κ² νμ±νλ λ° μ€μν©λλ€.
LEB128μ νλ μ΄μμ λ°μ΄νΈλ₯Ό μ¬μ©νμ¬ μ μλ₯Ό λνλ΄λ κ°λ³ κΈΈμ΄ μΈμ½λ© 체κ³μ λλ€. κ° λ°μ΄νΈ(λ§μ§λ§ λ°μ΄νΈ μ μΈ)λ μ΅μμ λΉνΈ(MSB)κ° 1λ‘ μ€μ λμ΄ λ λ§μ λ°μ΄νΈκ° λ€λ°λ¦μ λνλ λλ€. κ° λ°μ΄νΈμ λλ¨Έμ§ 7λΉνΈλ μ μ κ°μ λνλ΄λ λ° μ¬μ©λ©λλ€. λ§μ§λ§ λ°μ΄νΈλ MSBκ° 0μΌλ‘ μ€μ λμ΄ μνμ€μ λμ λνλ λλ€.
2. UTF-8 μΈμ½λ©
μ¬μ©μ μ§μ μΉμ μ μ΄λ¦μ μΌλ°μ μΌλ‘ λ€μν μΈμ΄μ λ¬Έμλ₯Ό λνλΌ μ μλ κ°λ³ λλΉ λ¬Έμ μΈμ½λ©μΈ UTF-8μ μ¬μ©νμ¬ μΈμ½λ©λ©λλ€. μ¬μ©μ μ§μ μΉμ μ μ΄λ¦μ νμ±ν λλ λ°μ΄νΈλ₯Ό λ¬Έμλ‘ μ¬λ°λ₯΄κ² ν΄μνκΈ° μν΄ UTF-8 λμ½λλ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
3. λ°μ΄ν° μ λ ¬
μ¬μ©μ μ§μ μΉμ λ΄μμ μ¬μ©λλ λ°μ΄ν° νμμ λ°λΌ λ°μ΄ν° μ λ ¬μ κ³ λ €ν΄μΌ ν μλ μμ΅λλ€. μΌλΆ λ°μ΄ν° μ νμ λ©λͺ¨λ¦¬μμ νΉμ μ λ ¬μ μꡬνλ©°, λ°μ΄ν°λ₯Ό μ¬λ°λ₯΄κ² μ λ ¬νμ§ λͺ»νλ©΄ μ±λ₯ λ¬Έμ λ μλͺ»λ κ²°κ³Όλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
4. 보μ κ³ λ € μ¬ν
μ¬μ©μ μ§μ μΉμ μμ μ 보μ λ¬Έμ λ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€. μ¬μ©μ μ§μ μΉμ λ΄μ μμ λ°μ΄ν°λ μ μ€νκ² μ²λ¦¬νμ§ μμΌλ©΄ μ μ©λ μ μμ΅λλ€. μ ν리μΌμ΄μ μμ μ¬μ©νκΈ° μ μ μ¬μ©μ μ§μ μΉμ μμ μΆμΆλ λͺ¨λ λ°μ΄ν°λ₯Ό κ²μ¦νκ³ μ μ ν΄μΌ ν©λλ€.
5. λꡬ λ° λΌμ΄λΈλ¬λ¦¬
WebAssembly μ¬μ©μ μ§μ μΉμ μμ μ λμμ΄ λλ μ¬λ¬ λꡬμ λΌμ΄λΈλ¬λ¦¬κ° μμ΅λλ€. μ΄λ¬ν λꡬλ μ¬μ©μ μ§μ μΉμ μ νμ±, μμ± λ° μ‘°μ νλ‘μΈμ€λ₯Ό λ¨μννμ¬ κ°λ° μν¬νλ‘μ°μ λ μ½κ² ν΅ν©ν μ μλλ‘ ν©λλ€.
- wasm-tools: Wasm λͺ¨λ νμ±, κ²μ¦ λ° μ‘°μ λꡬλ₯Ό ν¬ν¨νμ¬ WebAssembly μμ μ μν ν¬κ΄μ μΈ λꡬ λͺ¨μμ λλ€.
- Binaryen: WebAssemblyμ© μ»΄νμΌλ¬ λ° ν΄μ²΄μΈ μΈνλΌ λΌμ΄λΈλ¬λ¦¬μ λλ€.
- λ€μν μΈμ΄λ³ λΌμ΄λΈλ¬λ¦¬: λ§μ μΈμ΄μλ WebAssembly μμ μ μν λΌμ΄λΈλ¬λ¦¬κ° μμΌλ©°, μ΄λ μ’ μ’ μ¬μ©μ μ§μ μΉμ μ λν μ§μμ ν¬ν¨ν©λλ€.
μ€μ μ¬λ‘
μ¬μ©μ μ§μ μΉμ μ μ€μ μ¬μ©μ μ€λͺ νκΈ° μν΄ λͺ κ°μ§ μ€μ μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
1. Unity μμ§
Unity κ²μ μμ§μ WebAssemblyλ₯Ό μ¬μ©νμ¬ μΉ λΈλΌμ°μ μμ κ²μμ μ€νν μ μλλ‘ ν©λλ€. Unityλ μ¬μ©μ μ§μ μΉμ μ μ¬μ©νμ¬ μμ§ λ²μ , λμ νλ«νΌ λ° κΈ°ν κ΅¬μ± μ 보μ κ°μ κ²μμ λν λ©νλ°μ΄ν°λ₯Ό μ μ₯ν©λλ€. μ΄ λ©νλ°μ΄ν°λ Unity λ°νμμ μν΄ κ²μμ μ¬λ°λ₯΄κ² μ΄κΈ°ννκ³ μ€ννλ λ° μ¬μ©λ©λλ€.
2. Emscripten
C λ° C++ μ½λλ₯Ό WebAssemblyλ‘ μ»΄νμΌνκΈ° μν ν΄μ²΄μΈμΈ Emscriptenμ μμ€ λ§΅ μ°Έμ‘° λ° μ¬λ³Ό μ΄λ¦κ³Ό κ°μ λλ²κΉ μ 보λ₯Ό μ μ₯νκΈ° μν΄ μ¬μ©μ μ§μ μΉμ μ μ¬μ©ν©λλ€. μ΄ μ 보λ λλ²κ±°μ μν΄ λ μ μ΅ν λλ²κΉ κ²½νμ μ 곡νλ λ° μ¬μ©λ©λλ€.
3. WebAssembly μ»΄ν¬λνΈ λͺ¨λΈ
WebAssembly μ»΄ν¬λνΈ λͺ¨λΈμ μ»΄ν¬λνΈ μΈν°νμ΄μ€ λ° λ©νλ°μ΄ν°λ₯Ό μ μνκΈ° μν΄ μ¬μ©μ μ§μ μΉμ μ κ΄λ²μνκ² νμ©ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ»΄ν¬λνΈλ₯Ό λͺ¨λμμ΄κ³ μ μ°ν λ°©μμΌλ‘ ꡬμ±νκ³ μνΈ μ°κ²°ν μ μμ΅λλ€.
μ¬μ©μ μ§μ μΉμ μμ λͺ¨λ² μ¬λ‘
WebAssembly νλ‘μ νΈμμ μ¬μ©μ μ§μ μΉμ μ ν¨κ³Όμ μΌλ‘ μ¬μ©νλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
- λͺ νν λ°μ΄ν° νμ μ μ: μ¬μ©μ μ§μ μΉμ μ λ°μ΄ν°λ₯Ό ν¬ν¨νκΈ° μ μ λͺ ννκ³ μ λ¬Έμνλ λ°μ΄ν° νμμ μ μνμμμ€. μ΄λ κ² νλ©΄ λ€λ₯Έ κ°λ°μ(λλ λ―Έλμ μμ )κ° λ°μ΄ν°λ₯Ό μ΄ν΄νκ³ ν΄μνκΈ°κ° λ μ¬μμ§λλ€.
- μλ―Έ μλ μ΄λ¦ μ¬μ©: μ¬μ©μ μ§μ μΉμ μ μ€λͺ μ μ΄κ³ μλ―Έ μλ μ΄λ¦μ μ ννμμμ€. μ΄λ κ² νλ©΄ λ€λ₯Έ κ°λ°μκ° λ°μ΄ν°λ₯Ό κ²μ¬ν νμ μμ΄ μΉμ μ λͺ©μ μ μ΄ν΄νλ λ° λμμ΄ λ©λλ€.
- λ°μ΄ν° κ²μ¦ λ° μ μ : μ ν리μΌμ΄μ μμ μ¬μ©νκΈ° μ μ μ¬μ©μ μ§μ μΉμ μμ μΆμΆλ λͺ¨λ λ°μ΄ν°λ₯Ό νμ κ²μ¦νκ³ μ μ νμμμ€. μ΄λ κ² νλ©΄ 보μ μ·¨μ½μ μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
- λ°μ΄ν° μ λ ¬ κ³ λ €: μ¬μ©μ μ§μ μΉμ μ λ°μ΄ν°λ₯Ό ν¬ν¨ν λ λ°μ΄ν° μ λ ¬ μꡬ μ¬νμ μ μνμμμ€. μλͺ»λ μ λ ¬μ μ±λ₯ λ¬Έμ λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- λꡬ λ° λΌμ΄λΈλ¬λ¦¬ μ¬μ©: μ¬μ©μ μ§μ μΉμ μμ μ λ¨μννκΈ° μν΄ κΈ°μ‘΄ λꡬ λ° λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμμμ€. μ΄λ κ² νλ©΄ μκ°κ³Ό λ Έλ ₯μ μ μ½νκ³ μ€λ₯ μνμ μ€μΌ μ μμ΅λλ€.
- μ¬μ©μ μ§μ μΉμ λ¬Έμν: λ°μ΄ν° νμ, λͺ©μ λ° κ΄λ ¨ ꡬν μΈλΆ μ 보λ₯Ό ν¬ν¨νμ¬ μ¬μ©μ μ§μ μΉμ μ λν λͺ ννκ³ ν¬κ΄μ μΈ λ¬Έμλ₯Ό μ 곡νμμμ€.
κ²°λ‘
WebAssembly μ¬μ©μ μ§μ μΉμ μ μμμ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ WebAssembly λͺ¨λμ νμ₯νλ κ°λ ₯ν λ©μ»€λμ¦μ μ 곡ν©λλ€. μ¬μ©μ μ§μ μΉμ μ ꡬ쑰μ νμ± κΈ°μ μ μ΄ν΄ν¨μΌλ‘μ¨ κ°λ°μλ λ©νλ°μ΄ν° μ μ₯, λλ²κΉ μ 보, μΈμ΄ νμ₯, 보μ μ μ± λ° νλ‘νμΌλ§ λ°μ΄ν°λ₯Ό ν¬ν¨ν κ΄λ²μν μ ν리μΌμ΄μ μ μ΄λ₯Ό νμ©ν μ μμ΅λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ μ¬μ© κ°λ₯ν λꡬ λ° λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νλ©΄ μ¬μ©μ μ§μ μΉμ μ WebAssembly νλ‘μ νΈμ ν¨κ³Όμ μΌλ‘ ν΅ν©νκ³ μ ν리μΌμ΄μ μ μλ‘μ΄ κ°λ₯μ±μ μ΄ μ μμ΅λλ€. WebAssemblyκ° κ³μ λ°μ νκ³ λ λ리 μ±νλ¨μ λ°λΌ μ¬μ©μ μ§μ μΉμ μ μμ¬ν μ¬μ§ μμ΄ κΈ°μ μ λ―Έλλ₯Ό νμ±νκ³ μλ‘κ³ νμ μ μΈ μ¬μ© μ¬λ‘λ₯Ό κ°λ₯νκ² νλ λ° μ μ λ μ€μν μν μ ν κ²μ λλ€. WebAssembly λͺ¨λμ κ²¬κ³ μ±κ³Ό 무결μ±μ 보μ₯νκΈ° μν΄ λ³΄μ λͺ¨λ² μ¬λ‘λ₯Ό μ€μνλ κ²μ μμ§ λ§μμμ€.